package com.gator.feign.client.config;



import feign.Logger;
import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import static java.util.concurrent.TimeUnit.SECONDS;

@Configuration
public class FeignClientConfig {
    /**
     * @Description: 重试对象
     * @Author: PABLO
     * @Date: 2022/5/20 9:30
     * @Params: []
     * @Return: feign.Retryer
     **/
    @Bean
    public Retryer retryer() {
        //发起请求的时间间隔  毫秒
        //最大时间间隔（如5秒，最大尝试周期不超过5秒）
        //尝试次数
        return new Retryer.Default(500, SECONDS.toMillis(5), 6);
        /* 间隔重试逻辑
           //pow  返回第一个值取第二个值的幂值
           //如果 attempt - 1 为负数，说明重试次数到了，如果interval > maxPeriod 说明计算的时间大于最大重试阈值，返回阈值
           //Retryer.Default()的第2.3个参数满足一个则结束重试
        * long nextMaxInterval() {
          long interval = (long) (period * Math.pow(1.5, attempt - 1));
          return interval > maxPeriod ? maxPeriod : interval;
          }
        *  */
    }

    @Bean
    public Logger.Level feignClientLogLevel() {
        //全部
        return Logger.Level.FULL;
    }


}
